home *** CD-ROM | disk | FTP | other *** search
/ Ahoy 1985 December / Ahoy_Magazine_85-12_1985_Double_L.d64 / video setup (.txt) < prev   
Commodore BASIC  |  2022-10-26  |  11KB  |  301 lines

  1. 1 rem *** video setup  ***
  2. 2 rem creates 'gypsy video' for 'gypsy'
  3. 5 poke 55,255:poke 56,127:poke 643,255:poke 644,127:print "[147]"
  4. 7 f$=" ":c0%=0:c1%=0:c2%=0:c3%=0:c4%=0:c5%=0:c6%=0:sp%=0
  5. 8 def fn pg(x)=int(x/256):def fn lo(x)=x-256*(int(x/256))
  6. 10 gosub 90:gosub 600
  7. 12 print "[147]";:gosub 95:gosub 700:gosub 2000
  8. 13 gosub 900
  9. 14 sys 38046:poke 648,140
  10. 15 rem ** enable sprites
  11. 16 for i=0 to 199:next:poke es,31:poke 36839,32
  12. 17 print ll$bl$ll$"press button[146] to create 'gypsy video'";:goto 100
  13. 19 rem ** load subroutine
  14. 20 for i=xb to xe:read a:poke i,a:next:print ".[146]";:return
  15. 90 poke 53265,0:return
  16. 95 poke 53265,91:return
  17. 98 rem      *** action loop ***
  18. 100 if c0%>0 then c0%=0:goto 300
  19. 196 goto 100
  20. 298 rem    *** end handling ***
  21. 299 rem ** put video memory back to first block, and screen memory to 1024
  22. 300 gosub 90:poke es,0:rem disable sprites
  23. 304 rem restore video/screen memory
  24. 305 poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 3
  25. 310 poke 53272,20:poke 648,4:sys 40768
  26. 360 poke 37894,peek(45):poke 37895,peek(46)
  27. 365 poke 43,0:poke 44,128:poke 45,255:poke 46,159
  28. 370 save "@0:gypsy video",8,1
  29. 375 poke 43,1:poke 44,8:poke 45,peek(37894):poke 46,peek(37895)
  30. 380 poke 657,0:poke 792,71:poke 808,237
  31. 385 gosub 95:poke 37952,0:poke 37953,0
  32. 390 sys 65126
  33. 598 rem    *** arrange memory ***
  34. 600 vb=32768:poke 56578,peek(56578)or3:poke 56576,(peek(56576)and 252)or 1
  35. 602 sb=0:poke 53272,(sb*16)+4:sb=vb+1024*sb
  36. 604 bb=sb/256:poke 648,bb
  37. 611 rem ** sprite color table
  38. 612 ct(0)=53287:for i=1 to 7:ct(i)=ct(i-1)+1:next
  39. 614 ht(0)=53248:for i=1 to 7:ht(i)=ht(i-1)+2:next
  40. 616 vt(0)=53249:for i=1 to 7:vt(i)=vt(i-1)+2:next
  41. 618 hr=53264
  42. 620 es=53269
  43. 622 poke 53271,0:poke 53277,0:poke 53275,0:poke 53276,30
  44. 628 em=53276
  45. 630 poke 53285,15:poke 53286,7
  46. 635 for i=0 to 7:bc(i)=255-bs(i):next
  47. 638 rem     *** initialize values ***
  48. 640 print "[154]";
  49. 642 poke 53281,0
  50. 644 poke 53280,0
  51. 646 poke ct(0),7:poke ct(1),5:poke ct(2),2:poke ct(3),6:poke ct(4),12
  52. 659 rem       *** ml table setup ***
  53. 661 poke 37920,4:poke 37921,4
  54. 663 poke 37922,1
  55. 665 poke 37923,0
  56. 667 poke 37924,1:poke 37925,1
  57. 669 poke 37936,1
  58. 671 poke 37940,1
  59. 673 poke 37941,0
  60. 675 poke 37926,3:poke 37928,3
  61. 677 poke 37927,0:poke 37935,0:poke 37943,0
  62. 679 poke 53282,1:poke 53283,7:poke 53284,9
  63. 694 poke 657,128
  64. 696 return
  65. 699 rem *** intro screen ***
  66. 700 print "[147]"tab(14)"[199][217][208][211][217][160][208][201][204][207][212]"
  67. 710 print:print tab(6)"[217][207][213][210][160][211][200][201][208][160][201][211][160][194][197][201][206][199][160][208][210][197][208][193][210][197][196][146]":print:print
  68. 715 return
  69. 898 rem     *** sprite positions ***
  70. 900 for i=1 to 4:poke ht(i),20+int(rnd(9)*220)
  71. 901 poke vt(i),50+int(rnd(9)*190):next
  72. 902 poke hr,0
  73. 909 rem ** put stars on the screen
  74. 910 print "[147]";:for i=0 to 49:poke vb+int(rnd(9)*1024),46:next
  75. 915 for i=0 to 8:poke vb+int(rnd(9)*1024),42:next
  76. 919 rem ** starship position
  77. 920 poke 53248,175:poke 53249,150
  78. 921 rem ** starship direction
  79. 922 poke vb+1016,16
  80. 930 ll$=""
  81. 931 bl$="                                       ":bl$=bl$+bl$+" "
  82. 946 return
  83. 1998 rem    ***  machine language  ***
  84. 1999 rem ** startup sys routine
  85. 2000 poke 37888,peek(788):poke 37889,peek(789)
  86. 2001 xb=38046:xe=38079:gosub 20
  87. 2002 rem set interr.vector to interr.handler#1 and scanline 234
  88. 2003 rem sei lda#0 sta 788 lda#154 sta 789 lda#234 sta 53266
  89. 2004 data 120,169,0,141,20,3,169,154,141,21,3,169,234,141,18,208
  90. 2005 rem high bit, enable scan interr., disable timer interr., quit
  91. 2006 rem lda 53265 and#127 sta 53265 lda#1 sta 53274 sta 56333 cli rts
  92. 2007 data 173,17,208,41,127,141,17,208,169,1,141,26,208,141,13,220,88,96
  93. 2019 rem   ***  animation shell  ***
  94. 2020 xb=38144:xe=38176:gosub 20
  95. 2023 data 206,32,148,240,3,108,10,148
  96. 2026 data 173,33,148,141,32,148
  97. 2029 data 206,34,148,208,5,169,8,141,34,148,174,34,148,202
  98. 2032 data 173,35,148,240,6
  99. 2035 a=192:b=248:for i=38177 to 38219 step 6:poke i,189:poke i+1,a:poke i+2,148
  100. 2036 poke i+3,141:poke i+4,b:poke i+5,131:a=a+8:b=b+1:next
  101. 2039 poke 38225,108:poke 38226,10:poke 38227,148
  102. 2049 rem   *** movement counter ***
  103. 2050 xb=38272:xe=38288:gosub 20
  104. 2051 x=38272:poke 37896,fn lo(x):poke 37897,fn pg(x)
  105. 2052 poke 37898,fn lo(x):poke 37899,fn pg(x)
  106. 2055 data 206,36,148,240,3,108,12,148
  107. 2058 data 173,37,148,141,36,148,108,2,148
  108. 2059 rem ** bitset subroutine **
  109. 2060 xb=38314:xe=38323:gosub 20
  110. 2063 data 185,74,148,13,16,208,141,16,208,96
  111. 2069 rem ** bitclear subroutine **
  112. 2070 xb=38324:xe=38335:gosub 20
  113. 2073 data 185,74,148,73,255,45,16,208,141,16,208,96
  114. 2099 rem      *** xmove ***
  115. 2100 xb=38400:xe=38467:gosub 20
  116. 2103 data 169,1,57,75,148,240,3,32,128,150
  117. 2109 data 169,2,57,75,148,240,3,32,192,150
  118. 2119 data 169,4,57,75,148,240,17,185,74,148,45,16,208,240,6
  119. 2122 data 32,0,151,76,44,150,32,64,151
  120. 2128 data 169,8,57,75,148,208,1,96,185,74,148,45,16,208,240,4
  121. 2131 data 32,128,151,96,32,192,151,96
  122. 2139 rem   *** upmove subroutine ***
  123. 2140 xb=38528:xe=38561:gosub 20
  124. 2143 data 190,1,208,202,138,217,90,148,208,3,32,146,150,138,153,1,208,96
  125. 2146 data 173,48,148,208,4,232,76,247,149,190,91,148,202,76,247,149
  126. 2159 rem   *** downmove subroutine ***
  127. 2160 xb=38592:xe=38625:gosub 20
  128. 2163 data 190,1,208,232,138,217,91,148,208,3,32,210,150,138,153,1,208,96
  129. 2166 data 173,48,148,208,4,202,76,247,149,190,90,148,232,76,247,149
  130. 2179 rem *** leftmove (hi bit set) ***
  131. 2180 xb=38656:xe=38669:gosub 20
  132. 2183 data 190,0,208,202,16,3,32,180,149,138,153,0,208,96
  133. 2199 rem *** leftmove (hi bit clr) ***
  134. 2200 xb=38720:xe=38756:gosub 20
  135. 2203 data 190,0,208,202,138,217,106,148,208,3,32,82,151,138,153,0,208,96
  136. 2206 data 173,48,148,208,4,232,76,247,149,190,107,148,202,32,170,149,76,247,149
  137. 2219 rem *** rightmve (hi bit set) ***
  138. 2220 xb=38784:xe=38820:gosub 20
  139. 2223 data 190,0,208,232,138,217,107,148,208,3,32,146,151,138,153,0,208,96
  140. 2226 data 173,48,148,208,4,202,76,247,149,190,106,148,232,32,180,149,76,247,149
  141. 2239 rem *** rightmve (hi bit clr) ***
  142. 2240 xb=38848:xe=38861:gosub 20
  143. 2243 data 190,0,208,232,208,3,32,170,149,138,153,0,208,96
  144. 2399 rem *** basic movement handler ***
  145. 2400 xb=38336:xe=38346:gosub 20
  146. 2403 data 160,59,177,45,170,188,56,148,76,0,150
  147. 2469 rem ** report non-sprite-0 wraps and edges to basic
  148. 2470 xb=38391:xe=38399:gosub 20
  149. 2473 data 192,0,208,1,96,140,55,148,96
  150. 2499 rem   *** read joystick ***
  151. 2500 xb=38912:xe=38972:gosub 20
  152. 2502 x=38912:poke 37890,fn lo(x):poke 37891,fn pg(x)
  153. 2508 data 173,0,220,141,45,148,41,16,208,8,169,1,141,39,148,32,0,153
  154. 2511 data 173,45,148,41,15,201,15,208,3,108,12,148,73,15,141,75,148,32,128,152
  155. 2514 data 160,0,32,0,150,32,160,152,173,4,148,141,10,148
  156. 2516 data 173,5,148,141,11,148,108,12,148
  157. 2529 rem *** interr.move.handler ***
  158. 2530 xb=38976:xe=39009:gosub 20
  159. 2531 poke 37892,fn lo(xb):poke 37893,fn pg(xb)
  160. 2534 data 160,0,32,0,150,32,160,152
  161. 2537 data 206,40,148,208,243,173,38,148,141,40,148
  162. 2540 data 173,8,148,141,10,148,173,9,148,141,11,148,108,12,148
  163. 2549 rem *** set shape 0 ***
  164. 2550 xb=39040:xe=39057:gosub 20
  165. 2553 data 173,35,148,208,9,172,75,148,185,63,148,141,248,131,32,64,153,96
  166. 2569 rem ** sprite 0 collision routine
  167. 2570 xb=39072:xe=39111:gosub 20
  168. 2573 data 173,52,148,240,16,173,30,208,141,41,148,41,1,240,6
  169. 2575 data 32,80,153,76,208,152
  170. 2578 data 173,53,148,240,13,173,31,208,41,1,240,3,32,112,153,76,208,152,96
  171. 2579 rem ** unmove **
  172. 2580 xb=39120:xe=39148:gosub 20
  173. 2583 data 169,1,141,40,148,172,75,148,185,121,148,141,75,148
  174. 2586 data 160,0,32,0,150,172,75,148,185,121,148,141,75,148,96
  175. 2599 rem ** interrupt handler 1 **
  176. 2600 xb=39424:xe=39449:gosub 20
  177. 2601 for i=36856 to 36860:poke i,48:next
  178. 2602 rem clear interr.flag, reset vector, set new scanline
  179. 2603 rem lda#15 sta 53273 lda#64 sta 788 lda#254 sta 53266
  180. 2604 data 169,15,141,25,208,169,64,141,20,3,169,254,141,18,208
  181. 2605 rem change screen pointer and quit
  182. 2606 rem lda#52 sta 53272 pla tay pla tax pla rti
  183. 2607 data 169,52,141,24,208,104,168,104,170,104,64
  184. 2615 for i=35840 to 35903:poke i,0:next
  185. 2620 xb=39488:xe=39510:gosub 20
  186. 2621 rem clear interr.flag, reset vector, set new scanline
  187. 2622 rem lda#15 sta 53273 lda#0 sta 788 lda#234 sta 53266
  188. 2623 data 169,15,141,25,208,169,0,141,20,3,169,234,141,18,208
  189. 2624 rem set screen pointer, jump to anim. shell
  190. 2625 rem lda#4 sta 53272 jmp 38144
  191. 2626 data 169,4,141,24,208,76,0,149
  192. 2699 rem ** basic variable subroutines
  193. 2700 xb=39168:xe=39174:gosub 20
  194. 2701 rem ** report firebutton - c0%
  195. 2703 data 160,10,169,1,145,45,96
  196. 2709 rem ** report sprites to basic
  197. 2710 xb=39184:xe=39222:gosub 20
  198. 2711 rem c1%=edgewrap, c2%=s/s collis.
  199. 2713 data 160,17,173,55,148,240,2,145,45,160,24,173,49,148,240,2,145,45
  200. 2714 rem c3%=s/foreg.collis.
  201. 2716 data  160,31,173,50,148,240,2,145,45
  202. 2718 data 169,0,141,49,148,141,50,148,141,55,148,96
  203. 2719 rem ** report movement
  204. 2720 xb=39232:xe=39241:gosub 20
  205. 2721 rem c4%
  206. 2723 data 160,38,169,1,145,45,141,47,148,96
  207. 2729 rem ** report sprite 0 bounce/s
  208. 2730 xb=39248:xe=39257:gosub 20
  209. 2731 rem c5%
  210. 2733 data 160,45,173,41,148,41,254,145,45,96
  211. 2739 rem ** report sprite 0 bounce/f
  212. 2740 xb=39280:xe=39289:gosub 20
  213. 2741 rem c6%
  214. 2743 data 160,52,169,1,145,45,141,42,148,96
  215. 2898 rem   *** wrapup ***
  216. 2900 xb=40704:xe=40741:gosub 20
  217. 2901 rem ** set collision vector
  218. 2902 x=40704:poke 37900,fn lo(x):poke 37901,fn pg(x)
  219. 2908 data 173,30,208,141,49,148,173,31,208,141,50,148,32,16,153
  220. 2909 rem move the next planet
  221. 2910 rem ldx 37934 dex bne+2 ldx #4 stx 37934 ldy(37944),x jsr 38400
  222. 2911 data 174,46,148,202,208,2,162,4,142,46,148,188,56,148,32,0,150
  223. 2915 rem end interrupt routine
  224. 2916 rem pla,tay,pla,tax,pla,rti
  225. 2917 data 104,168,104,170,104,64
  226. 2949 rem ** restore video (unsys)
  227. 2950 xb=40768:xe=40792:gosub 20
  228. 2951 rem set interr. vector to normal housekeeping, timed interrupts
  229. 2952 rem sei lda 37888 sta 788 lda 37889 sta 789
  230. 2953 data 120,173,0,148,141,20,3,173,1,148,141,21,3
  231. 2954 rem lda#0 sta 53274 lda#129 sta 56333 cli rts
  232. 2955 data 169,0,141,26,208,169,129,141,13,220,88,96
  233. 2998 rem  *** set up sprite shapes ***
  234. 2999 rem ** planets
  235. 3000 for i=34304 to 34816 step 512:for j=0 to 448 step 64:for k=0 to 20
  236. 3001 read a:poke i+j+k,a:next
  237. 3002 for k=21 to 63:poke i+j+k,0:next:next:gosub 3985:next
  238. 3009 rem ** planet 1 shape data
  239. 3010 data 0,40,0,0,175,0,82,191,192,82,175,128,2,191,128,0,171,0,0,40,0
  240. 3011 data 0,40,0,0,190,0,2,255,128,5,190,128,5,254,128,0,175,0,0,40,0
  241. 3012 data 0,40,0,0,250,0,3,254,128,2,90,128,3,90,128,0,190,0,0,40,0
  242. 3013 data 0,40,0,0,234,0,3,250,128,3,229,128,3,229,128,0,250,0,0,40,0
  243. 3014 data 0,40,0,0,170,0,3,234,80,3,170,80,3,170,128,0,234,0,0,40,0
  244. 3015 data 0,40,0,0,170,20,3,170,212,2,170,128,2,170,192,0,170,0,0,40,0
  245. 3016 data 0,40,0,0,170,64,2,171,192,2,170,192,2,171,192,0,170,0,0,40,0
  246. 3017 data 0,40,0,5,171,0,6,175,192,2,171,192,2,175,192,0,170,0,0,40,0
  247. 3019 rem ** planet 2 shape data
  248. 3020 data 0,40,0,3,170,192,62,170,148,162,170,143,42,255,252,2,255,192,0,40,0
  249. 3021 data 0,40,0,3,106,192,61,106,188,241,106,143,62,171,252,2,171,192,0,40,0
  250. 3022 data 0,24,0,3,90,192,61,90,188,81,90,143,63,234,188,3,234,128,0,24,0
  251. 3023 data 0,20,0,3,86,192,61,86,188,241,86,138,61,255,168,1,255,128,0,20,0
  252. 3024 data 0,20,0,3,85,128,61,85,104,241,85,74,63,223,252,3,223,192,0,20,0
  253. 3025 data 0,20,0,3,149,192,62,149,124,242,149,79,63,253,252,3,253,192,0,20,0
  254. 3026 data 0,40,0,2,169,192,62,169,124,242,169,79,63,255,252,3,255,192,0,40,0
  255. 3027 data 0,40,0,2,170,0,42,170,188,162,170,143,63,255,212,3,255,192,0,40,0
  256. 3058 gosub 3985
  257. 3059 rem ** sprite animation tables
  258. 3060 for i=38088 to 38112 step 8:for j=0 to 7:read a:poke i+j,a:next:next
  259. 3061 rem ** animation table data
  260. 3062 data 24,25,26,27,28,29,30,31
  261. 3063 data 32,33,34,35,36,37,38,39
  262. 3064 data 27,26,25,24,31,30,29,28
  263. 3065 data 37,36,35,34,33,32,39,38
  264. 3098 rem    ***   sprite 0 shapes   ***
  265. 3099 rem ** sprite 0 direction table
  266. 3100 for i=37952 to 37961:read a:poke i,a:next:gosub 3985
  267. 3101 data 16,20,0,22,23,21,0,18,17,19
  268. 3102 rem ** sprite 0 animation table
  269. 3103 for i=0 to 7:poke 38080+i,16+i:next
  270. 3104 rem ** sprite 0 shapes
  271. 3105 for i=33792 to 34240 step 64:for j=0 to 18 step 3
  272. 3106 read a:poke i+j,a:poke i+j+1,0:poke i+j+2,0:next
  273. 3107 for j=21 to 63:poke i+j,0:next:next:gosub 3985
  274. 3109 rem ** sprite 0 data
  275. 3110 data 8,28,28,28,54,34,0
  276. 3111 data 6,14,28,120,240,48,32
  277. 3112 data 0,224,62,31,62,224,0
  278. 3113 data 32,48,240,120,28,14,6
  279. 3114 data 0,34,54,28,28,28,8
  280. 3115 data 4,12,15,30,56,112,96
  281. 3116 data 0,7,124,248,124,7,0
  282. 3117 data 96,112,56,30,15,12,4
  283. 3298 rem ** sprite movement data
  284. 3300 x=0:for i=37944 to 37951:poke i,x:x=x+2:next
  285. 3305 x=1:for i=37962 to 37976 step 2:poke i,x:x=x*2:next
  286. 3310 for i=37963 to 37977 step 2:read a:poke i,a:next
  287. 3311 data 0,5,6,10,9,0,0,0
  288. 3316 for i=37978 to 37992 step 2:read a:poke i,a:next
  289. 3317 data 50,43,43,43,43,43,43,43
  290. 3319 for i=37979 to 37993 step 2:read a:poke i,a:next
  291. 3320 data 231,242,242,242,242,242,242,242
  292. 3322 for i=37994 to 38008 step 2:read a:poke i,a:next
  293. 3323 data 23,0,0,0,0,0,0,0
  294. 3325 for i=37995 to 38009 step 2:read a:poke i,a:next
  295. 3326 data 80,87,87,87,87,87,87,87
  296. 3328 for i=38010 to 38019:read a:poke i,a:next
  297. 3329 data 2,1,0,8,10,9,0,4,6,5
  298. 3331 poke 37934,1
  299. 3985 print "![146]";
  300. 3990 return
  301.